
#pragma once
#include<iostream>
#include<string>
#include<unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include<fcntl.h>
#include<ctime>
using namespace std;

namespace zlog
{
  namespace Util
  {
     class Date
     {
      public:
         static size_t getTime()//返回系统当前时间
         {
            return (size_t)time(nullptr);
         } 
     };
     class File
     {
     public:
         static bool exists(const string& pathname) //判断一个文件是否存在
         {
            struct stat buf;
            if(stat(pathname.c_str(),&buf) < 0) return false;
            return true;
            //   return (access(pathname.c_str(),F_OK) == 0 );
         }

         static string path(const string& filename) ///获取一个文件所在的目录路径
         {
              // ./a/b/c.txt
              size_t pos = filename.find_last_of("/\\"); //找 / 或 '\'
              if(pos == string::npos) return ".";
              return filename.substr(0,pos+1);
         }

         static void createDirectory(const string& filename)
         {
            // ./abc/cd/e
               int cur = 0;
               while(cur < filename.size())
               {
                  size_t pos = filename.find_first_of("/\\",cur); //注意是从cur开始找
                  if(pos == string::npos)
                  {
                      mkdir(filename.c_str(),0777);
                      break;
                  }
                  string parent_dir = filename.substr(0,pos+1);
                  if(exists(parent_dir)) //存在,别忘了更新指针
                  {
                      cur = pos + 1;
                      continue;
                  }
                  mkdir(parent_dir.c_str(),0777);//不存在则创建
                  cur = pos + 1;
               }
         }

     };

  }
}